前端那些事

vuePress-theme-reco chenpeng    2020 - 2021
前端那些事 前端那些事

Choose mode

  • dark
  • auto
  • light
首页
文章目录
  • Browser
  • CSS
  • ES6
  • JavaScript
  • Network
  • TypeScript
  • Vue
  • Vue3
  • Webpack
标签
时间轴
GitHub
author-avatar

chenpeng

85

Article

25

Tag

首页
文章目录
  • Browser
  • CSS
  • ES6
  • JavaScript
  • Network
  • TypeScript
  • Vue
  • Vue3
  • Webpack
标签
时间轴
GitHub
  • JS-V8引擎原理

    • 宏任务与微任务、Event Loop事件循环
    • JS的垃圾回收机制
    • setTimeout与setInterval

JS的垃圾回收机制

vuePress-theme-reco chenpeng    2020 - 2021

JS的垃圾回收机制

chenpeng 2020-11-30 JS引擎

JS 具有自动垃圾回收机制,垃圾收集器会按照固定的时间间隔运行

# 1.标记清除(常用)

当变量进入执行环境时,就标记这个变量为**“进入环境”,从逻辑上讲,永远不能释放进入环境的变量所占用的内存空间,因为当执行流进入相应的环境,就有可能会用到它们。当变量离开环境时,就标记这个变量为“离开环境”**。

垃圾收集器在运行的时候会给存储在内存中的所有变量都加上标记,然后它会去掉环境中的变量以及被环境中的变量引用的标记,而在此之后再次被加上标记的变量将被视为准备删除的变量,因为环境中的变量已经无法访问这些变量了,最后垃圾收集器完成内存清除工作,销毁那些带标记的值,并回收它们所占用的内存空间。

# 2.引用计数

声明了一个变量并将一个引用类型的值赋值给这个变量,这个引用类型值的引用次数就是1,同一个值被赋给另一个变量,这个引用类型值的引用次数加1,当包含这个引用类型值的变量被赋值成另一个值时,这个引用类型值的引用次数减1,当引用次数变成0时,说明无法再访问这个值了,当垃圾收集器下一次运行时,它就会释放那些引用次数为0的值所占用的内存空间(循环引用会释放不掉内存,造成内存泄漏)